﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ModeloMagiPack.Entidades;
using DALMagiPack.Funcionalidad;

namespace BLLMagiPack.Managers
{
    public class BLLLocalidad: BLLMagiPack
    {
        public List<Localidad> TraerLocalidades(Provincias provincia)
        {
            DALMagiPack<Localidad> dalLocalidad = new DALMagiPack<Localidad>();
            List<Filtro> opciones = new List<Filtro>() { new Filtro() { Columna = NombresColumnas.Provincia, Tipo = TipoFiltro.Equal } };

            return dalLocalidad.Traer(new Localidad() { Provincia = (int)provincia }, opciones).OrderBy(l => l.Nombre).ToList();
        }

        public List<Localidad> TraerLocalidades()
        {
            DALMagiPack<Localidad> dalLocalidad = new DALMagiPack<Localidad>();

            return dalLocalidad.Traer(new Localidad(), new List<Filtro>());
        }

        public Localidad TraerLocalidad(int idLocalidad)
        {
            DALMagiPack<Localidad> dalLocalidad = new DALMagiPack<Localidad>();
            List<Filtro> opciones = new List<Filtro>() { new Filtro() { Columna = NombresColumnas.IdLocalidad, Tipo = TipoFiltro.Equal } };

            return dalLocalidad.Traer(new Localidad() { IdLocalidad = idLocalidad }, opciones).FirstOrDefault();
        }

        public List<Localidad> TraerLocalidades(string nombre)
        {
            DALMagiPack<Localidad> dalLocalidad = new DALMagiPack<Localidad>();
            List<Filtro> opciones = new List<Filtro>() { new Filtro() { Columna = NombresColumnas.Nombre, Tipo = TipoFiltro.Like } };
            
            return dalLocalidad.Traer(new Localidad() { Nombre = nombre }, opciones);
        }

        public void CrearLocalidad(Localidad nuevaLocalidad)
        {
            DALMagiPack<Localidad> dalLocalidad = new DALMagiPack<Localidad>();
            dalLocalidad.Insertar(nuevaLocalidad);
        }

        public void ModificarLocalidad(Localidad localidad)
        {
            DALMagiPack<Localidad> dalLocalidad = new DALMagiPack<Localidad>();
            dalLocalidad.Modificar(localidad);
        }

        public void EliminarLocalidad(Localidad localidad)
        {
            DALMagiPack<Localidad> dalLocalidad = new DALMagiPack<Localidad>();
            string mensaje = "No se puede eliminar. Hay {0} que han sido asignados a la localidad {1}";
            List<string> elementos = new List<string>();

            if (new BLLProveedor().TraerProveedoresPorLocalidad(localidad.IdLocalidad).Count > 0)
                elementos.Add("Proveedores");

            if (new BLLCliente().TraerClientesPorLocalidad(localidad.IdLocalidad).Count > 0)
                elementos.Add("Clientes");

            if (new BLLCheque().TraerChequesPorLocalidad(localidad.IdLocalidad).Count > 0)
                elementos.Add("Cheques");

            if (elementos.Count > 0)
            {
                string textoElementos = string.Empty;

                for (int i = 0; i < elementos.Count; i++)
                {
                    textoElementos += elementos[i];

                    if (i == (elementos.Count - 2))
                        textoElementos += " y ";
                    else if(i < (elementos.Count - 2))
                        textoElementos += ", ";
                }

                mensaje = string.Format(mensaje, textoElementos, localidad.Nombre);
                throw new BLLMagiPackException(mensaje);
            }
            else
                dalLocalidad.Eliminar(localidad);
        }
    }
}
